import axios from "axios";
import { ElMessage } from 'element-plus';
import {pinia} from '../stores/index';
import { useUserInfoStore } from '../stores/userInfo';
import NProgress from "nprogress";
import "nprogress/nprogress.css";
// 配置新建一个 axios 实例
const service = axios.create({
    baseURL: "/app-dev/",
    timeout: 50000,
});

// 添加请求拦截器
service.interceptors.request.use((config) => {
    NProgress.start()//开启进度条
    // 如果有token, 通过请求头携带给后台
    const userInfoStore = useUserInfoStore(pinia) // 如果不是在组件中调用,必须传入pinia
    const token = userInfoStore.token
    if (token) {
        // config.headers['token'] = token  // 报错: headers对象并没有声明有token, 不能随便添加
        (config.headers)['token'] = token
    }
    return config;
});

// 添加响应拦截器
service.interceptors.response.use(
    (response) => {
        NProgress.done()//关闭进度条

        if(response.data.code !== 200){
            // 判断响应状态码
            if (response.data.code == 501)  return  Promise.reject(ElMessage.error("用户名有误"))
            else if (response.data.code == 503) return  Promise.reject(ElMessage.error("密码有误"))
            else if (response.data.code == 504) return  Promise.reject(ElMessage.error("登录已过期"))
            else if (response.data.code == 505) return  Promise.reject(ElMessage.error("用户名占用"))
        } else {
            return response.data.data; /* 返回成功响应数据中的data属性数据 */
        }
    },
    (error) => {
        NProgress.done()//关闭进度条
        return Promise.reject(error.message);
    }
);

export default service;
